/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package controller;

import dao.ChiTietDonDatHangDAO;
import dao.DonDatHangDAO;
import dao.GiayDAO;
import dao.LoaiGiayDAO;
import dao.MauSacDAO;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import pojo.ChiTietDonDatHangPOJO;
import pojo.DonDatHangPOJO;
import pojo.GiayPOJO;
import pojo.KhachHangPOJO;
import pojo.LoaiGiayPOJO;
import pojo.MauSacPOJO;

/**
 *
 * @author Administrator
 */
@WebServlet(name = "LichSuMuaHangController", urlPatterns = {"/LichSuMuaHangController"})
public class LichSuMuaHangController extends HttpServlet {

    /** 
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
            //Lấy danh mục loại giày.
            ArrayList<LoaiGiayPOJO> dsLoaiGiay = LoaiGiayDAO.layDanhMucLoaiGiay();
            request.setAttribute("dsLoaiGiay", dsLoaiGiay);

            //Lấy danh mục màu sắc.
            ArrayList<MauSacPOJO> dsMauSac = MauSacDAO.layDanhMucMauSac();
            request.setAttribute("dsMauSac", dsMauSac);
            //----------------------------------------------------------

            HttpSession session = request.getSession();
            //----------------------------------------------------------

            //<editor-fold desc="1.Lấy giỏ hàng">
            //Kiểm tra nếu người dùng chưa đăng nhập thì không cho mua hàng.
            KhachHangPOJO khachHang = null;
            if (session.getAttribute("KhachHang") == null) {
                String url = request.getContextPath() + "/index.jsp";
                response.sendRedirect(url);
                return;
            }
            khachHang = (KhachHangPOJO) session.getAttribute("KhachHang");

            // <editor-fold desc="2.Lấy thông tin các đơn đặt hàng">
            ArrayList<DonDatHangPOJO> dsDonDatHang = DonDatHangDAO.lay_DanhSachDonDatHang_TheoKhachHang_Client(khachHang.getTenDangNhap());
            ArrayList<ArrayList<GiayPOJO>> dsGioHangDaMua = new ArrayList<ArrayList<GiayPOJO>>();

            //Lấy danh sách chi tiết đơn đặt hàng.
            for (int i = 0; i < dsDonDatHang.size(); i++) {//Lần lượt duyệt từng đơn đặt hàng
                DonDatHangPOJO ddh = dsDonDatHang.get(i);
                ArrayList<ChiTietDonDatHangPOJO> dsChiTietDonDatHang = ChiTietDonDatHangDAO.lay_DanhSachChiTietDonDatHang_TheoDonDatHang_Client(ddh.getMaDonDatHang());

                //Ứng với một đơn đặt hàng thì sẽ có 1 giỏ hàng.
                ArrayList<GiayPOJO> gioHang = new ArrayList<GiayPOJO>();
                for (int j = 0; j < dsChiTietDonDatHang.size(); j++) {
                    ChiTietDonDatHangPOJO ct = dsChiTietDonDatHang.get(j);
                    GiayPOJO giay = GiayDAO.layThongTinGiay(ct.getMaGiay());
                    //Lấy số lượng giày của giày trong chi tiết đơn đặt hàng.
                    int soLuongGiay = DonDatHangDAO.lay_SoLuongGiay_TheoMaDonDatHang_TheoMaGiay_Client(ddh.getMaDonDatHang(), giay.getMaGiay());
                    //Set lại số lượng giày.
                    giay.setSoLuong(soLuongGiay);
                    gioHang.add(giay);
                }
            }

            //Nếu người dùng chọn xóa đơn đặt hàng.
            if (request.getParameter("btXoa") != null) {
                if (request.getParameter("cbXoa") != null) {//Nếu danh sách mã đơn đặt hàng khác rỗng.
                    //Lấy danh sách mã đơn đặt hàng cần xóa.
                    String[] dsDonDatHangXoa = (String[]) request.getParameterValues("cbXoa");
                    //Duyệt qua tất cả các mã đơn đặt hàng cần xóa.
                    for (int i = 0; i < dsDonDatHangXoa.length; i++) {
                        int maDonDatHangXoa = Integer.parseInt(dsDonDatHangXoa[i]);
                        //Xóa đơn đặt hàng.
                        boolean kq = DonDatHangDAO.xoa_DonDatHang_Client(maDonDatHangXoa);
                        //Nếu bị không xóa được
                        if (kq == false) {
                            out.println("<script>alert('Có lỗi xảy ra, không thể xóa đơn đặt hàng')</script>");
                        }
                        //Nếu xóa đơn đặt hàng thành công thì xóa đơn đặt hàng đã có trong dsDonDatHang.
                        for (int j = 0; j < dsDonDatHang.size(); j++) {
                            DonDatHangPOJO ddhXoa = dsDonDatHang.get(j);
                            if (ddhXoa.getMaDonDatHang() == maDonDatHangXoa) {
                                dsDonDatHang.remove(j);
                            }
                        }
                    }
                }
            }
            request.setAttribute("dsDonDatHang", dsDonDatHang);
            request.setAttribute("dsGioHangDaMua", dsGioHangDaMua);
            request.getRequestDispatcher("/client/lich-su-mua-hang.jsp").forward(request, response);
            // </editor-fold>

        } finally {
            out.close();
        }
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /** 
     * Handles the HTTP <code>GET</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /** 
     * Handles the HTTP <code>POST</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /** 
     * Returns a short description of the servlet.
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>
}
